#include <QApplication>
#include <QTreeView>
#include <QStandardItemModel>
#include <QDebug>

int main(int argc,char* argv[])
{
    QApplication a(argc,argv);

    //创建标准项模型
    QStandardItemModel model;

    //获取标准项模型的根项，根项是不可见的
    QStandardItem *parentItem =model.invisibleRootItem();     //返回根项

    //创建标准项
    QStandardItem *item0=new QStandardItem;
    item0->setText(QString("A"));

    //给标准项设置图标
    QPixmap pixmap0(50,50);    //初始化宽和高
    pixmap0.fill(Qt::red);
    item0->setIcon(QIcon(pixmap0));
    item0->setToolTip(QString("A项的提示"));

    //将item0作为父项的子项，然后再让item0作为父项
    parentItem->appendRow(item0);
    parentItem=item0;

    //创建item0的子项目
    QStandardItem* item1=new QStandardItem;
    item1->setText(QString("B项"));
    QPixmap pixmap1(50,50);
    pixmap1.fill(Qt::blue);
    item1->setIcon(pixmap1);
    item1->setToolTip("B项的提示");
    //将item1添加为子项
    parentItem->appendRow(item1);

    QStandardItem* item2=new QStandardItem;
    QPixmap pixmap2(50,50);
    pixmap2.fill(Qt::green);

    item2->setData("C项",Qt::EditRole);       //可编辑
    item2->setData("C项的提示",Qt::ToolTipRole);      //提示信息
    item2->setData(QIcon(pixmap2),Qt::DecorationRole);
    parentItem->appendRow(item2);


    //在树视图中显示数据
    QTreeView view;
    view.setModel(&model);
    view.show();

    //提取数据
    QModelIndex indexA=model.index(0,0,QModelIndex());
    qDebug()<<"indexA row count:"
            <<model.rowCount(indexA);

    QModelIndex indexB=model.index(0,0,indexA);
    qDebug()<<"indexB text:"
           <<model.data(indexB,Qt::EditRole).toString();
    qDebug()<<"indexB toolTip:"
           <<model.data(indexB,Qt::ToolTipRole).toString();




    return a.exec();

}
